#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <errno.h>

struct msgbuf
{
    long mtype;
    int num;
    char ch;
};

int main(int argc, const char *argv[])
{
    key_t key;
    int msgid;
    struct msgbuf mymsg,mymsg1;

    if ((key = ftok("./app", 'a')) < 0)
    {
        perror("ftok err");
        return -1;
    }

    if((msgid = msgget(key,IPC_CREAT|IPC_EXCL|0666))<0)
    {
        if(errno == EEXIST)
        {
            msgid = msgget(key,0666);
        }
        else
        {
            perror("msgget err");
            return -1;
        }
    }
    mymsg.mtype = 100;
    mymsg.num = 10;
    mymsg.ch = 'a';
    //添加消息
    msgsnd(msgid,&mymsg,sizeof(mymsg)-sizeof(long),0);

    //读取消息
    msgrcv(msgid,&mymsg1,sizeof(mymsg)-sizeof(long),100,0);
    printf("%d %c\n",mymsg1.num,mymsg1.ch);

    //删除消息队列
    msgctl(msgid,IPC_RMID,NULL);
    return 0;
}